﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Linq;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using Extensions;
using ConfExpert.Utility;
using System.IO;
using DevExpress.XtraBars;
using DevExpress.Utils;

namespace Tailord
{
    public partial class KumasIhtiyaci : XPopupForm
    {
        int OrderId;
        DataTable dtDistinctUretici;
        bool Prova;
        public KumasIhtiyaci(int OrderId,bool Prova)
        {
            InitializeComponent();
            this.OrderId = OrderId;
            this.Prova = Prova;
        }
        
        private void KumasIhtiyaci_Load(object sender, EventArgs e)
        {
            ShowOnlyBar();
            if (Prova)
            {
                chkProva.Visibility = BarItemVisibility.Always;
                chkProva.CheckedChanged += chkProva_CheckedChanged;
            }           

            lblHeader.Caption = "Sipariş No. " + OrderId.ToString();

            gvIhtiyac.Init("GetKumasIhtiyaci", OrderId,false);
            gvIhtiyac.SutunEkle("KalanIhtiyac", typeof(decimal), "KumasIhtiyaci-Isnull(SiparisEdilen,0)");

            bbiSave.Enabled = gvIhtiyac.DataTable().Select("SiparisDurumu<>'Verildi'").Length > 0;

            gvIhtiyac.FormatAsNumber(2, "AkfilStok", "KalanIhtiyac");
            //gvIhtiyac.SetCaptions("AkfilStokK:Akfil Stok (Karbel)", "AkfilStokT:Akfil Stok (Tailord)");
            gvIhtiyac.YanYanaGetir("KalanIhtiyac:AkfilStok");
            gvIhtiyac.MakeColumnInvisible("KumasYeri", "KumasId", "AkfilStok", "MontiStok", "StokMetraj");
            gvIhtiyac.AddSummary("KumasIhtiyaci", "KalanIhtiyac");

            gvIhtiyac.MakeReadOnly();

            bbiSave.ItemClick += bbiSave_ItemClick;
            gvIhtiyac.RowStyle += gvIhtiyac_RowStyle;
            gvIhtiyac.RowCellStyle += gvIhtiyac_RowCellStyle;
            gvIhtiyac.BestFitColumns();
        }

        void gvIhtiyac_RowCellStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowCellStyleEventArgs e)
        {
            if (e.RowHandle>-1)
            {
                switch (e.Column.FieldName)
                {
                    case "KalanIhtiyac":
                        e.Appearance.Font = new Font(AppearanceObject.DefaultFont, FontStyle.Bold);
                        break;
                }
            }
        }

        void gvIhtiyac_RowStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowStyleEventArgs e)
        {
            if (e.RowHandle > -1)
            {
                string message = gvIhtiyac.GetRowCellValue(e.RowHandle, "SiparisDurumu").ToString();
                if (message.ToLower() == "verilmedi")
                    e.Appearance.BackColor = Color.Gainsboro;
                else if (message.ToLower().Contains("verildi"))
                    e.Appearance.BackColor = Color.DarkSeaGreen;
                else if (message.ToLower().Contains("kısmen"))
                    e.Appearance.BackColor = Color.LightGoldenrodYellow;
            }
        }

        void chkProva_CheckedChanged(object sender, ItemClickEventArgs e)
        {
            bool Isprova = chkProva.Checked;
            gvIhtiyac.VeriyiGuncelle(true, "GetKumasIhtiyaci", OrderId, Isprova);
        }

        void bbiSave_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            DataTable dtIhtiyac = gvIhtiyac.DataTable().Select("SiparisDurumu<>'Verildi'").CopyToDataTable();
            dtIhtiyac.TableName = "Table";

            DataRow[] drBosLokasyon = dtIhtiyac.Select("Isnull(KumasYeri,'') = ''");
            if (drBosLokasyon.Length > 0)
            {
                if (drBosLokasyon.Length == dtIhtiyac.Rows.Count)
                {
                    XtraMessageBox.Show("Sipariş vermek istediğiniz kumaşların lokasyon bilgisi girilmemiş. Bu kumaşların lokasyon bilgisini KUMAŞ ekranından doldurun !");
                    return;
                }

                else
                {
                    if (XtraMessageBox.Show("İhtiyacınız olan kumaşlardan lokasyonu belli olmayan kumaşlar var. Kalan kumaşlar için tedarik emri verilsin mi", "Critical", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.No)
                        return;
                    foreach (DataRow drHata in drBosLokasyon)
                    {
                        dtIhtiyac.Rows.Remove(drHata);
                    }
                }
            }

            DataRow[] drAkfilHata = dtIhtiyac.Select("KumasYeri in ('Akfil','DESTEX','TAILORD')  and KumasDurumu='Eksik'");
            if (drAkfilHata.Length > 0 && dtIhtiyac.Rows.Count == drAkfilHata.Length)
            {
                XtraMessageBox.Show("İhtiyacınız olan kumaş miktarı stoklarınızda yok !");
                return;
            }
            if (drAkfilHata.Length > 0)
            {
                if (XtraMessageBox.Show("İhtiyacınız olan kumaşlardan bazıları stoklarınızda yok. Kalan kumaşlar için tedarik emri verilsin mi", "Critical", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.No)
                    return;
                foreach (DataRow drHata in drAkfilHata)
                {
                    dtIhtiyac.Rows.Remove(drHata);
                }                
            }

            dtDistinctUretici = dtIhtiyac.DefaultView.ToTable(true, "KumasYeri");
            bool Isprova = chkProva.Checked;
            int UserId = AppSession.UserInfo.UserId;
            string xml = XML.SerializeAll(dtIhtiyac);

            foreach (DataRow dr in dtDistinctUretici.Rows)
            {
                string KumasYeri = dr["KumasYeri"].ToString();

                DataSet dsFoy = AppSession.DataManager.ExecuteDataSet("GetKumasSiparisFoy", OrderId, UserId, KumasYeri, "", Isprova);
                Reports.KumasSiparisFoyu ks = new Reports.KumasSiparisFoyu(dsFoy);
                MemoryStream ms = new MemoryStream();
                ks.ExportToPdf(ms);
                byte[] foyPdf = ms.ToArray();

                DataSet dsCikisEmri;
                string cikisEmriId = "";
                if (KumasYeri == "AKFİL")
                {
                    dsCikisEmri = AppSession.DataManager.ExecuteDataSet("InsCikisEmriAtConfexpert", OrderId, xml);
                    foreach (DataTable tbCikis in dsCikisEmri.Tables)
                    {
                        cikisEmriId += tbCikis.Rows[0][0].ToStringNN() + ",";
                    }
                    cikisEmriId = cikisEmriId.RemoveIfEndsWith(",");
                }
                else if (KumasYeri == "DESTEX")
                {
                    AppSession.DataManager.ExecuteDataSet("InsDestexKumasSiparis", OrderId, xml);
                }

                using (ceMessenger.ceMessengerSoapClient messenger = new ceMessenger.ceMessengerSoapClient())
                {
                    string username = "ce";
                    string password = "ce";
                    string reportName = "Tailord." + OrderId.ToString() + "_KumasSiparisFoyu.pdf";
                    string from = "Tailord";
                    string subject = "SiparişNo." + OrderId.ToString() + " Kumaş Siparişi";
                    string message = OrderId.ToString() + " numaralı sipariş için istenen kumaşlar ektedir.<br><br>Lütfen teslim tarihini bildiriniz.<br><br><img src=''http://www.tailorder.net/img/logo.png''/><br><br><br><img src=''http://www.tailorder.net/img/tailordalt.png''/>";
                    if (cikisEmriId != "")
                        message += "<br><br>" + cikisEmriId.ToString() + " nolu  çıkış emri/emirleri ile bu kumaşları Tailord'a gönderiniz  ";
                    string to = "";
                    string cc = "";

                    foreach (DataRow drMail in dsFoy.Tables[2].Rows)
                    {
                        string senderType = drMail["SenderType"].ToStringNN();
                        string Mail = drMail["Mail"].ToStringNN();

                        if (senderType == "To")
                            to += Mail + ",";
                        else
                            cc += Mail + ",";
                    }

                    to = to.RemoveIfEndsWith(",");
                    cc = cc.RemoveIfEndsWith(",");
                    if (to == "")
                    {
                        XtraMessageBox.Show(KumasYeri + " için herhangi bir mail tanımlanmamış. Lütfen Tedarikçi Mailleri formundan mail adresi tanımı yapın");
                        return;
                    }

                    messenger.SendEmailWithAttachmentFileName(username, password, from, to, cc, subject, message, foyPdf, reportName);
                }
            }
            ExecQuery("UpdKumasSiparisofOrderK", OrderId, Isprova, xml, UserId);
            this.DialogResult = DialogResult.OK;
        }
    }
}